package com.neutech.solar.entity;

import com.neutech.solar.constant.Constant;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 * @author 小李要吃鱼
 * @date 2021-01-25 16:29
 */
public class AbstractFrame extends Frame {
    public void init(String title){
        //大小
        this.setSize(Constant.WINDOW_WIDTH,Constant.WINDOW_HEIGHT);
        //位置
        this.setLocation(0,0);
        //可视化
        this.setVisible(true);
        //添加关闭窗口的方法
        // 匿名内部类 相当于继承 且也是个传参多态
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        this.setTitle(title);
        //设置窗口大小的不可更改
        this.setResizable(true);
        //在中间显示
        this.setLocationRelativeTo(null);
        //启动多线程  new一个匿名对象
        //如果要启动两个线程 则再写一个 new MyThread().start();
        new MyThread().start();
    }
    //添加多线程的内部类
    class MyThread extends Thread{
        // java 实现多线程 进行重新
        @Override
        public void run() {
            for(;;) {
                repaint(); // 自动调用paint方法
                // 当前线程间隔时间
                try {
                    Thread.sleep(40);//单位是毫秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    Image backImg = null;
    @Override
    public void update(Graphics g) {
        if (backImg == null) {
            // 如果虚拟图片不存在，创建一个和窗口一样大小的图片
            backImg = createImage(Constant.WINDOW_WIDTH,Constant.WINDOW_HEIGHT);
        }
        // 获取到虚拟图片的画笔
        Graphics backg = backImg.getGraphics();
        Color c = backg.getColor();
        backg.setColor(Color.PINK);
        backg.fillRect(0, 0, Constant.WINDOW_WIDTH,Constant.WINDOW_HEIGHT);
        backg.setColor(c);
        // 调用虚拟图片的paint()方法，每50ms刷新一次
        paint(backg);
        g.drawImage(backImg, 0, 0, null);
    }
}
